package t1;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;

// 该类 封装 编码方法coding 与向指定文件输出编码后的文件 writeCodingFile 方法  将码字信息的arraylist sfe_s 输出到指定文件中
public class codingMethod {
//    传入ArrayList<char[]> 的char_array 遍历每个 char数组 中的元素 在word_array中找到对应码字下标 index 对应编码数组code_array中的index
//    返回 一个字符串数组code_string 每个字符串 对应一个码字

    public ArrayList<String> coding(ArrayList<char[]> char_array,ArrayList<Character> word_array,ArrayList<String> code_array){
//        创建 返回的字符串数组
        ArrayList<String> code_string = new ArrayList<>();
        for (char[] chars : char_array) {
//            遍历每个 字符数组
            for (int i = 0; i < chars.length; i++) {
//                得到 字符对应码字的 下标 index
                int index = word_array.indexOf(chars[i]);
//                到code_array 中找到 相应的code  并添加到code_string 中
                code_string.add(code_array.get(index));
//                System.out.println(index+"== 输出");
//                System.out.println(code_array.get(index));


            }
        }// 所有数组遍历结束 完成编码
//        System.out.println("===========方法中测试输出 code_string ");
//        System.out.println(code_string);
        return code_string;


    }
//    将指定的 ArrayList<String> code_string 输出到 指定文件中
    public void writeCodingFile(File file1,File file2,ArrayList<String> code_string,ArrayList<SFE_s> sfe_s) throws IOException {

// 1 创建一个字符缓冲输出流对象  构造方法中传递字符输出流
        BufferedWriter bw1 = new BufferedWriter(new FileWriter(file1));
        BufferedWriter bw2 = new BufferedWriter(new FileWriter(file2));
        Iterator<SFE_s> it_sfes = sfe_s.iterator();
        Iterator<String> it_code = code_string.iterator();
        while (it_code.hasNext()){
//            此处 添加一个 | 作为分隔符 易于后期译码 看情况删除
//            bw1.write(it_code.next()+"|");
            bw1.write(it_code.next()+",");
//            暂时不开启 隔行输入
//            bw1.newLine();
//            bw1.flush();   缓存区满了 会自动刷新 到硬盘中 不需要 强制刷新
        }
        while (it_sfes.hasNext()){
            bw2.write(it_sfes.next().toString());
            bw2.write("\n");
//            bw2.flush();
        }
        bw1.flush();
        bw2.flush();
        bw1.close();
        bw2.close();


    }

}
